package org.dousb.doupicturebackend.manager.websocket.disruptor;


import cn.hutool.core.thread.ThreadFactoryBuilder;
import com.lmax.disruptor.dsl.Disruptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

/**
 * PictureEditEventDisruptorConfig
 * 图片编辑事件Disruptor配置类，用于配置Disruptor实例和处理器
 *
 * @author 豆沙包
 * @version 1.0
 * @since 2025-11-06  19:15
 */
@Configuration
public class PictureEditEventDisruptorConfig {

    @Resource
    private PictureEditEventWorkHandler pictureEditEventWorkHandler;

    /**
     * 创建一个名为"pictureEditEventDisruptor"的Disruptor Bean
     * Disruptor是一个高性能的并发框架，用于实现无锁的并发设计
     *
     * @return 配置好的Disruptor实例，用于处理图片编辑事件
     */
    @Bean("pictureEditEventDisruptor")
    public Disruptor<PictureEditEvent> messageModelRingBuffer() {
        // 设置缓冲区大小为256KB，这是Disruptor性能调优的重要参数
        int bufferSize = 1024 * 256;
        // 创建Disruptor实例
        // 参数1：事件工厂，用于创建新的事件实例
        // 参数2：缓冲区大小
        // 参数3：线程工厂，用于创建处理事件的线程
        Disruptor<PictureEditEvent> disruptor = new Disruptor<>(
                PictureEditEvent::new,
                bufferSize,
                ThreadFactoryBuilder.create()
                        .setNamePrefix("pictureEditEventDisruptor")
                        .build());
        // 使用工作池处理器来处理事件，支持多线程并行处理
        disruptor.handleEventsWithWorkerPool(pictureEditEventWorkHandler);
        // 启动Disruptor，开始接收和处理事件
        disruptor.start();
        // 返回配置完成的Disruptor实例
        return disruptor;
    }
}